﻿///////////////////////////////////////////////////////////////////////////////
// File:        Mutex.hpp
// Author:      671643387@qq.com
// Date:        2016年1月5日 下午5:41:44
// Description:
///////////////////////////////////////////////////////////////////////////////

#ifndef THREAD_MUTEX_HPP_
#define THREAD_MUTEX_HPP_

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
# pragma once
#endif

#include <boost/noncopyable.hpp>
#include <fog/Typedef.hpp>

#if defined(__WINDOWS__)
#   define WIN32_LEAN_AND_MEAN
#   include <Windows.h>
#elif defined(__LINUX__)
#   include <pthread.h>
#endif

namespace fog
{
    namespace thread
    {
        class Mutex : public boost::noncopyable
        {
        public:
            Mutex(void);
            ~Mutex(void);

        public:
            void lock(void);
            void unlock(void);

        private:
#if defined(__WINDOWS__)
            CRITICAL_SECTION lock_;
#elif defined(__LINUX__)
            pthread_mutex_t lock_;
#endif
        };
    }
}

#endif /* THREAD_MUTEX_HPP_ */
